VBA中如何实现选择word中第二段到最后一段的文本。

ActiveDocument.Range(ActiveDocument.Paragraphs(2).Range.Start, ActiveDocument.Range.End).Select

word VBA编辑器里是不能更改快捷键的。你可以按如下操作进行:打开“Word选项”对话框,点“自定义”选项卡下方的“键盘快捷方式”旁边的“自定义”按钮——在“别类”中选择“宏”——在右侧选择你要定义快捷键的宏名——在“请按新快捷键”文本框中按你要的快捷键——点“指定”按钮——关闭对话框

在我們的印象中,VB 所提供的 MsgBox 是一個強制回應的視窗,您一定要按了其中的某一個 CommandButton 之後,它才會關閉!但是在某些軟体中,我們會看到,明明是使用系統的 MsgBox,可是您如果不理它,幾秒鐘之後,它就自行關閉了!別人是如何做到的呢?這個問題偶而會出現在討論區中,有的人會回答:

只要自己做一個類似MsgBox的視窗,就可以自己用Timer來控制這個視窗何時要關閉了!

但是,其實不用這麼麻煩的,只要使用系統的MsgBox再加一個Timer就可以控制了!

我們都知道MsgBox可以設定成很多不同的樣子,可以有很多不同的圖示,不同的按鈕,其中控制按鈕的部份,可以設定的常數如下:

常數值說明
vbOKOnly  0只顯示OK按鈕。
VbOKCancel  1顯示OK及Cancel按鈕。
VbAbortRetryIgnore  2顯示Abort、Retry及Ignore按鈕。
VbYesNoCancel  3顯示Yes、No及Cancel按鈕。
VbYesNo  4顯示Yes及No按鈕。
VbRetryCancel  5顯示Retry及Cancel按鈕。

為什麼要特別提到MsgBox的常數呢?因為下面我們要告訴您的方法,還是有一點點限制的!當您設定的常數是VbAbortRetryIgnore或VbYesNo時,下面的方法也是沒用的!

  '在表單的宣告區中加入以下的宣告 
  Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _ 
  (ByVal lpClassName As String, ByVal lpWindowName As String) As Long 
  Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _ 
  (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _ 
  lParam As Any) As Long 
  Private Const WM_CLOSE = &H10 
  Private Const MsgTitle As String = "Test Message" 

  '在表單中加入一個 CommandButton 及一個 Timer 控制項,加入以下程式碼: 
  Private Sub Command1_Click() 
    Dim nRet As Long 
    Timer1.Interval = 3000 
    Timer1.Enabled = True 
    nRet = MsgBox("若您不回應的話,3 秒後此 MsgBox 會自動關閉", 64, MsgTitle) 
    Timer1.Enabled = False 
  End Sub 

  Private Sub Timer1_Timer() 
    Dim hWnd As Long 
    hWnd = FindWindow(vbNullString, MsgTitle) 
    Call SendMessage(hWnd, WM_CLOSE, 0, ByVal 0&) 
  End Sub 

好了,很簡單吧!您執行程式時,當 MsgBox 出現 3 秒之後,就會自動關閉了!

注意:此方法的限制說明:

自动关闭msgbox窗口

以下代码放到模块内,不要送到userform窗口的代码模块内

Public Declare Function MsgBoxTimeOut Lib "user32" Alias "MessageBoxTimeoutA" (ByVal hwnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long, ByVal wlange As Long, ByVal dwTimeout As Long) As Long

Sub PopupMsgbox(Optional prompt As String = "OK", Optional title As String = "友情提示", Optional seconds As Long = 300)

MsgBoxTimeOut 0, prompt, title, 64, 0, seconds

End Sub

提示代码命令写成:

PopupMsgbox "您输入的位数超过了8位!请重新输入[进来日期]!", "Note:", 1333

当在word中显示域代码时,经常会看到域代码中有\* MERGEFORMAT。

\* MERGEFORMAT 其中\*表示接下来的是格式化的开关,其中 MERGEFORMAT表示在更新域结果时保持原来的格式。这个原来的格式可以是域代码加的,也可以是在外部设置的字体、颜色等格式。

当从域对话框中插入域代码时,\* MERGEFORMAT 开关是自动添加的。

The following example Visual Basic for Applications code sets text that is greater than 255 characters in length to the form field named Text1:

  Sub WorkAround255Limit()
      ' Set Text1 form field to a unique string.
      ActiveDocument.FormFields("text1").Result = "****"
      If ActiveDocument.ProtectionType <> wdNoProtection Then
          ActiveDocument.Unprotect
      End If
      Selection.GoTo What:=wdGoToBookmark, Name:="Text1"
      Selection.Collapse
      Selection.MoveRight wdCharacter, 1
      Selection.TypeText (String(256, "W"))
      Selection.GoTo what:=wdGoToBookmark, Name:="Text1"
      ' Remove unique characters from Text1 form field.
      With Selection.Find
         .Execute findtext:="*", replacewith:="", replace:=wdReplaceAll
      End With
      ActiveDocument.Protect Password:="", NoReset:=True, Type:= _
         wdAllowOnlyFormFields
   End Sub